在前幾天的 App Engine 與 K8S 中,或許我已經大致的提過 Micro Services ,今天來試著更詳細的介紹 Micro Services 的概念。
Micro Services 不限於任何的程式語言,無論 Python、Node.JS 或 Go 都有辦法實現,它最大的特色就是「模組化」,把一個大程式給切割成一塊一塊的模組,方便維護與管理,當面對一個非常龐大的系統時, Micro Services 也可以快速的定位發生的問題。
與 Micro Services 相對的是 Monolithic application 單體式應用程式,也就是將所有的功能全部寫在一起,這種方式以連接角度而言,設計會比較單純與簡單,開發時程上也會比較快。但當整個系統日益增大,則維護上會較為困難。
相較於單體式程式,微服務還有另外一個特色是可以快速的將任何一個模組進行擴展,假設我們有一個銷售網站,而微服務切分了物品的展示前端,與實際購買,處理訂單的後端。在雙 11 等活動時,假設我們已知大多數的客戶已經將需購買的商品加至購物車,這種情形下,我們就可以單純的透過 K8S 的 Scaling 相關設定,設定擴展銷售後端的模組,而不需要連同前端一起進行擴展,減少租用機器的費用。
微服務最大的特點就是每個服務應該獨立自主,因此服務間最好需要有獨立的資料庫,服務間唯一的溝通方式是透過 API (最常見的是透過 RESTful) 進行交互。
基於 Micro Services 設計的 SaaS 最佳實踐方式,目前最有名的是 The 12-Factor App ,關於相關的介紹可以參考去年 Miles 大大的鐵人賽文章。簡單來說,我們的開發過程可以遵守 12 Factor 的方式,有效的開發方便移植、擴展的程式。而這 12 Factor 依序是: